1.0			[Trouver le bon numro de srie]
			^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Ce texte fait partie du tutorial de TiTi. Soyez sr d'avoir lu les fichiers "introduction.txt" et "ASM et cRaCKiNg.txt" avant de commencer ce fichier.

Installation de Soft-Ice
^^^^^^^^^^^^^^^^^^^^^^^^

* Une fois soft-ice install, vous devez configurer les exports.  KSkeUcAVeUtdIRceKiDiT ? Pour cracker, nous allons devoir mettre des breakpoints sur certaines fonctions de l'API de Windows. Ces fonctions sont mises en place par les fichier Kernel32.dll et User32.dll. Ouvrez le fichier Winice.dat dans le rpertoir o vous avez install Soft-Ice. Il vous faut maintenant exporter les focntions de Kernell32.dll et User32.dll. Vous devez enlever le ";" avant ces deux lignes :

EXP=c:\windows\system\kernel32.dll
EXP=c:\windows\system\user32.dll

* Maintenant, rebootez sous SoftIce...
Vous y tes ? Parfait. Bon, la commande magique est ctrl-d. Essayez pour voir :) Mais attention, c'est violent ;) La commande pour revenir est aussi ctrl-d. Que vites-vous ? Un cran en mode texte... Bon, tapez wr et wd pour afficher les fentres de registres et de donnes. En fait, l vous venez de stopper un processus de Windows, son nom est celui qui figure en bas sur la ligne verte.

Comment on va s'y prendre ?
^^^^^^^^^^^^^^^^^^^^^^^^^^^^

* Pour beaucoup de sharewares, et c'est le cas de Winzip, vous recevez, quand vous vous tes enregistr une cl que vous devez mettre quelque part dans le logiciel et qui va le transformer en version complete. Dans certains cas (et c'est le cas ici) cette cl dpend de votre nom, et vous devez fournir un couple "nom + cl" au logiciel. Notre but est, ici de trouver la cl correspondant  votre nom.

* Le programme peut vrifier la validit de la cl de diverses manires. La manire la plus simple, et c'est le cas de Winzip, est de gnrer une clef  partir de votre nom et de la comparer ensuite  celle que vous avez entre. Il suffit alors de stopper le programme avant la comparaison, et de russir  lire le comparant et le compar, l'un des deux est la bonne cl :) D'autres mthodes de vrification sont plus dlicates. Le programme vrifie que le code que vous avez entr sastisfait certaines conditions... En gros, imaginez que vous entrez un nombre, et que le programme vrifie que celui-ci est bien la solution d'une quation complique...

Quelques commandes de Soft-Ice
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

* CTRL-D : vous envoie sous Soft-Ice
* Help : affiche l'aide (tonnant, non ? ;)

* bpx <Fonction de l'API / adresse du code du programme> : mets un BP sur la fonction spifie de Windows, ou sur l'instruction  l'adresse spcifie.

* bpm <adresse mmoire> : mets un BP sur l'accs  une adresse mmoire

* bl : liste vos BP
* bc <# du BP / *> : enleve un, ou tous vos BP
* bd <# du BP / *> : dactive le BP
* be <# du BP / *> : ractive le BP

* d <adresse mmoire> : affiche les donnes de "adresse mmoire" dans la fenetre "data"

[F8]  : execute l'instruction courante, et va  l'intrieur des "call"
[F10] : excute l'instruction courante, mais ne va pas  l'intrieur des "call"
[F12] : excute la fonction jusqu'au RET (quand vous tes dans un "call") et permet donc de sortir de la fonction

Allons-y !!
^^^^^^^^^^^

* Bon, tout d'abord, il faut trouver o rentrer le serial. Allez dans help/about et appuyez sur R, on y est !
* La, vous voyez une boite de dialogue qui vous permet de saisir un "Name" et un "Registration #"
Lorsque vous cliquez sur OK, Winzip lit votre nom et votre serial puis gnre un numro de srie en fonction de votre nom et le compare avec celui que vous avez entr. Si votre numro de srie est incorrect, il se vexe et vous envoie un message d'erreur ;)
* On va essayer d'interrompre le programme lorsqu'il lit votre nom et votre serial. Nous allons donc poser un breakpoint. Il y a deux fonctions trs utilises pour lire les donnes dans un champ :
GetWindowText
et GetDlgItemText

Si le programme est 32 bits, rajoutez un "A" aprs le nom de la fonction.

* Bon, passons aus choses srieuses. Entrez votre nom (TiTi dans mon cas) et un numro de srie bidon (123456789 par exemple). Maintenant allons sous softice (ctrl-D) et mettons deux BP (break points) :
BPX GetWindowTextA
BPX GetDlgItemTextA <-- c'est celui-ci qui est utile :)

* Revenez sous Winzip et cliquez sur "OK". PAF ! Vous tes sous Soft-Ice ! (c'est bo hein ;). Bon, tapez wr (afficher les registres) et wd (afficher la fenetre de data). Wow, je vois Winzip dsassembl, la ? Heuh, non, en fait, vous tes  l'intrieur de la fonction GetDlgItemTextA, dans User32.dll. Appuyez sur [F12]. Voila, la vous tes de retour  Winzip. Winzip a donc lu le nom... appuyez sur F5 pour quitter S-I, et vous revenez sur Winzip, moins d'une seconde, puisque Winzip lis maintenant votre serial. Vous tes  nouveau sur le user32.dll. Appuyez donc sur F12 pour en sortir, et vous voila sous Winzip : 

* Avant de voir le listing que vous obtenez, voyons comment un programme passe ses paramtres  une fonction de Windows. Fonction GetDlgItemTextA
UINT GetDlgItemText(
    HWND  hDlg,	// handle of dialog box
    int  nIDDlgItem,	// identifier of control
    LPTSTR  lpString,	// address of buffer for text
    int  nMaxCount 	// maximum size of string
   );
* Nous avons donc 4 pramtres. Le programme va les transfrer  Windows par la pile. En les empilant les uns aprs les autres en partant du dernier. Voila, c'est tout :) Cette fonction retourne dans eax le nombre de caractre saisis. J'ai personnellement saisi comme S/N : 123456789. Eax contient donc la valeur "9" (regardez dans la fentre du haut).


:00409D49  push 00000028			<-- paramtre 4
:00409D4B  push 00471258			<-- paramtre 3 (adresse ou il va mettre le nom !)
:00409D50  push 00000C80			<-- paramtre 2
:00409D55  push [ebp+08]			<-- paramtre 1
:00409D58  Call dword ptr [00476AC8]		<-- 1r appel  GetDlgItemTextA (nom)
:00409D5E  push 0000000A			<-- paramtre 4
:00409D60  push 0046F578			<-- paramtre 3 (adresse ou il va mettre le serial !)
:00409D65  push 00000C81			<-- paramtre 2
:00409D6A  push [ebp+08]			<-- paramtre 1
:00409D6D  Call dword ptr [00476AC8]		<-- 2me appel  GetDlgItemTextA (serial)
:00409D73  movzx eax, byte ptr [00471258]	<-- On envoie dans eax le premier caracctre du nom
:00409D7A  test eax, eax			<-- Est-il nul ?
:00409D7C  je 00409D92				<-- Si oui, on saute ! Pas la peine de continuer !
:00409D7E  movzx eax, byte ptr [0046F578]	<-- On envoie dans eax le premier caractre du serial
:00409D85  test eax, eax			<-- Est-il nul ?
:00409D87  je 00409D92				<-- Si oui, on saute ! Pas la peine de continuer !
:00409D89  call 004096EA			<-- Sinon, on continue
:00409D8E  test eax, eax
:00409D90  jne 00409DD3

* Si vous voulez voir votre nom, tapez "D 471258". Pour voir votre serial, tapez "D 46F578".
* Bon, que faire maintenant ? On pourrait tracer le programme pas  pas [F8] et essayer de comprendre ce qu'il fait, jusqu' ce que l'on rencontre la procdure de gnration du serial, qu'on excute, et on pique le serial ? Oui, c'est une bonne ide, mais il y a plus rapide ! Je vais vous dire comment nous allons procder... Le serial est bien en 46F578 , right ? Que va faire le programme ? Il va regarder si notre serial est vide (voir ci-dessus) ensuite, il va gnrer le "vrai" serial  partir de notre nom, puis il va le comparer  notre serial. Nous allons poser un BP sur l'acccs au serial :
BPM 46F578

* Appuyons sur F5 pour laisser le programme s'excuter jusqu' notre prochain BP... On atterit en 409D85, l ou il vrifie que l'on a bien entr quelque chose (voir listing au dessus)! On continue donc, on appuie sur F5. Et l, on atterrit  la routine de comparaison !

:004465F0  mov al, byte ptr [esi]	<-- On envoie dans al le caractre contenu  l'adresse ESI (tapez D ESI et vous verrez notre serial !) car ESI = 46F578 :))
:004465F2  inc esi			<-- On passe au caractre suivant
:004465F3  mov ah, byte ptr [edi]	<-- On envoie dans ah le caractre contenu  l'adresse EDI
:004465F5  inc edi			<-- On passe au caractre suivant
:004465F6  cmp ah, al			<-- On compare les 2 caractre
:004465F8  je 004465EC			<-- S'ils sont egaux, on revient pour le caractre suivant !

* Elle est belle, non ? Et, vous l'aurez comris, le bon serial est en EDI ! On tape :
D EDI

... et on obtient le bon numro, dans la fentre de donnes :)) Si seulement le Loto marchait comme ca :D

Name : TiTi
Registration # : 8627024C

Voila, j'espre que j'ai t clair et que vous avez tout compris ! Envoyez moi vos commentaires, suggestions, etc  TiTi_1st@hotmail.com

Vous pouvez maintenant passer  la suite : "Dead listing et patching.txt"


		- TiTi